package model

import (
	"nexus/utils"

	"time"

	"gorm.io/gorm"
)

const TableNameUser = "user"

type User struct {
	ID        string     `gorm:"column:id;primaryKey;type:varchar(255)" json:"id"`              // 用户ID
	Username  string     `gorm:"column:username;uniqueIndex;type:varchar(255)" json:"username"` // 用户名
	Password  string     `gorm:"column:password;type:varchar(255)" json:"password"`             // 密码
	Nickname  string     `gorm:"column:nickname;type:varchar(255)" json:"nickname"`             // 昵称
	AvatarID  string     `gorm:"column:avatar_id;type:varchar(255)" json:"avatar_id"`           // 头像ID
	Email     string     `gorm:"column:email;uniqueIndex;type:varchar(255)" json:"email"`       // 邮箱
	Phone     string     `gorm:"column:phone;uniqueIndex;type:varchar(255)" json:"phone"`       // 电话
	IsSuper   int        `gorm:"column:is_super;not null;default:0" json:"is_super"`            // 是否为超级管理员，1表示是，0表示否
	Status    int        `gorm:"column:status;not null;default:1" json:"status"`                // 用户状态，1表示启用，0表示禁用
	CreatedAt time.Time  `gorm:"column:created_at;not null" json:"created_at"`                  // 创建时间
	UpdatedAt time.Time  `gorm:"column:updated_at;not null" json:"updated_at"`                  // 更新时间
	DeletedAt *time.Time `gorm:"column:deleted_at;index;default:null" json:"deleted_at"`        // 删除时间
}

func (*User) TableName() string {
	return TableNameUser
}

// BeforeCreate GORM Hook - 在创建前生成ID
func (a *User) BeforeCreate(tx *gorm.DB) error {
	if a.ID == "" {
		a.ID = utils.GenerateStringID()
	}
	return nil
}
